package com.luxsoft.siipap.em.replica.importadores.inventarios;

import java.io.IOException;
import java.util.Map;

import com.luxsoft.siipap.em.replica.importadores.dbf.DBFRowHandler;
import com.luxsoft.siipap.em.replica.importadores.dbf.DBFSupport;
import com.luxsoft.siipap.inventarios.model.Existencia;
import com.luxsoft.siipap.service.ServiceLocator2;
import com.luxsoft.siipap.util.DBUtils;

/**
 * Importa las existencias desde ARSALD11.ACU
 * 
 * Temporalmente util presentar las existencias de siipap dbf
 * 
 * @author Ruben Cancino Ramos
 *
 */
public class ImportadorDeExistenciasDBF implements DBFRowHandler{
	
	
	private int year;
	private int mes;
	
	
	public void execute(int year,int mes) throws IOException{
		
		this.year=year;
		this.mes=mes;
		DBFSupport support=new DBFSupport();
		String file="c:\\pruebas\\saldo\\ARSALD11.ACU";
		support.execute(file,this, true);
	}

	public void processRow(Map<String, Object> row) throws Exception {
		
		Number sucursal=(Number)row.get("SASUCURSAL");
		if(sucursal==null){
			System.out.println("Sucursal no existe: "+row);
			return;
		}
		if(	 
				true)
		{
			//System.out.println("Prcocesando :"+row);
			
			Number SASALDACT=(Number)row.get("SASALDACT");
			if(SASALDACT==null)
				SASALDACT=new Long(0);
			String SAARTICULO=(String)row.get("SAARTICULO");
			//System.out.println("Actualizando: "+SAARTICULO+ " :"+SASALDACT+ "Suc: "+sucursal);
			
			Existencia exis=ServiceLocator2.getExistenciaDao().buscarPorClaveSiipap(SAARTICULO, sucursal.intValue(), year, mes);
			if(exis==null){
				//System.out.println("No encontro Existencia para: "+SAARTICULO+ " Suc:"+sucursal);
				return;
			}else{
				if(exis.getCantidad()!=SASALDACT.doubleValue()){
					System.out.println("Actualizando: "+SAARTICULO+ " :"+SASALDACT+ "Suc: "+sucursal);
					System.out.println("\t Exis actual: "+exis.getCantidad());
					exis.setCantidad(SASALDACT.doubleValue());
					ServiceLocator2.getExistenciaDao().save(exis);
				}
			}
			
			/*
			double existenciaInicial=SASALDACT.doubleValue();
			double movimientos=buscarMovimientos(SAARTICULO,3L, DateUtil.toDate("15/12/2009"));
			double saldo=existenciaInicial+movimientos;
			exis.setCantidad(saldo);
			ServiceLocator2.getExistenciaDao().save(exis);
			*/
		}else
			return;
		
	
	}
	/*
	public double buscarMovimientos(final String producto,final Long sucursal,final Date fecha){
		List<Number> res=ServiceLocator2.getHibernateTemplate().executeFind(new HibernateCallback(){
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				return session.createQuery("select sum(i.cantidad) from Inventario i where i.producto.clave=? " +
						"and i.sucursal.id=? and i.fecha=?")
				.setEntity(0, producto)
				.setEntity(1,sucursal)
				.setParameter(2, fecha,Hibernate.DATE)
				.list();
			}			
		});
		return res.isEmpty()?0.0d:res.get(0).doubleValue();
	}*/
	
	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMes() {
		return mes;
	}

	public void setMes(int mes) {
		this.mes = mes;
	}

	
	
	/*public double calcularExistencia(final String producto,final Long sucursal,final Date fecha){
		List<Number> res=ServiceLocator2.getHibernateTemplate().executeFind(new HibernateCallback(){
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				List<Inventario> res= session.createQuery(
						"from Inventario i " +
						" where i.clave=? " +
						" and i.sucursal.id=? " +
						" and i.fecha<=?")
				.setParameter(0, producto)
				.setParameter(1,sucursal)
				.setParameter(2, fecha,Hibernate.DATE)
				.list();
				for(Inventario i:res){
					System.out.println(i);
				}
				return new Double(0);
			}
			
		});
		return res.isEmpty()?0.0d:res.get(0).doubleValue();
	}*/
	
	/*public void actualizarSaldos(){
		DBUtils.whereWeAre();
		//final Sucursal sucursal=(Sucursal)ServiceLocator2.getUniversalDao().get(Sucursal.class, Long.valueOf(3L));
		String hql="select distinct e.clave from Existencia e  where e.year=2009 and e.mes=12 and e.sucursal.id=3";
		final List<String> productos=ServiceLocator2.getHibernateTemplate().find(hql);
		for(String prod:productos){
			
			double exis=calcularExistencia(prod, 3L, DateUtil.toDate("15/12/2009"));
			System.out.println("Existencia: "+prod+ " : "+exis);
		}
		
		ServiceLocator2.getHibernateTemplate().execute(new HibernateCallback(){
			public Object doInHibernate(Session session)throws HibernateException, SQLException {
				String 
				return null;
			}
			
		});
		
	}*/
	
	public static void main(String[] args) throws IOException {
		DBUtils.whereWeAre();
		//new AjustarExistencias().execute(2009,12);
		new ImportadorDeExistenciasDBF().execute(2010, 11);
	}

}
